문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 디자인 패턴 (문단 편집) === 반복자(iterator) === 객체 지향 언어에서 가장 접하기 쉬운 패턴. 당장 C#의 foreach 문은 반복자(IEnumerable) 인터페이스를 구현해야 사용 가능하다. 또한 C#의 모든 배열은 IEnumerable 인터페이스를 구현한다. {{{#!syntax csharp List list = new List(); // List에 요소 추가 // foreach(int _value in list) { Console.WriteLine(_value); } }}} 자세히 설명하자면, 고전적인 패턴으로 [[자료구조]]에서 자료 전체를 순회할 때 List같은 구조에서는 아래와 같이 반복할 것이다. {{{#!syntax java for(int index=0; index { boolean hasNext(); E next(); void remove(); } }}} [* E는 제네릭(필요에 따라 자료형을 정의하여 사용하면 됨)이고, remove는 구현해도 안 해도 상관은 없다.] 이렇게 정의를 하고, 실제로 자료구조에 접근할 때에는 아래와 같이 접근하면 된다. {{{#!syntax java Iterator iterator = collection.iterator(); while(iterator.hasNext() == true) { Object object = iterator.next(); object.doSomething(); } }}} 이러면 자료구조가 Array이든 List이든 Tree Graph든, Iterable을 정의해놓기만 하면 저런 식으로 자료구조 전체를 순회하여 작업을 할 수 있게 된다. 물론 맨 위의 방법처럼 고전적인 for문을 쓸 수 있다면 그쪽이 더 빠르긴 하다. for문은 컴퓨터 구조적인 발전으로 인해 [[캐시 메모리]]의 효과를 가장 많이 받는 구문이지만, 반복자는 그렇지 않기 때문. C++의 경우엔 반복자를 정의하는 클래스가 begin과 end란 이름의 함수, 그리고 반복자엔 ++연산자 오버로딩, * 연산자 오버로딩을 구현해야 하도록 되어 있다. begin은 첫 자료의 반복자를 반환하고 end는 마지막 반복자를 반환하는데, 사실 빈 반복자를 반환하면 된다. 어디에 인터페이스 같은 게 정의돼 있는 것은 아니라서 배우기는 상대적으로 어려운 편. 실제 자료구조엔 이런 식으로 접근한다. {{{#!syntax cpp std::listlist; for(std::list::iterator it = list.begin(); it != list.end(); ++it){ (*it)=3; } }}}저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기